unit uProdutos;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.DBCtrls, Vcl.Grids,
  Vcl.DBGrids, Vcl.ExtCtrls, Vcl.StdCtrls, Vcl.Buttons, Vcl.Mask, JvExStdCtrls,
  JvEdit, JvValidateEdit, JvExMask, JvToolEdit, JvBaseEdits, JvDBControls,
  System.UITypes, Vcl.ImgList, JvButton, JvCtrls, Vcl.Imaging.pngimage,
  JvImageList, Data.DB;

type
  TfrmProdutos = class(TForm)
    PageControlProdutos: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    Panel1: TPanel;
    DBGrid1: TDBGrid;
    DBNavigator: TDBNavigator;
    edtProcod: TJvValidateEdit;
    edtProdescr: TEdit;
    edtProcodbarra: TEdit;
    Label5: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Panel2: TPanel;
    btnOk: TBitBtn;
    btnCancelar: TBitBtn;
    Image1: TImage;
    btnFiltrar: TJvImgBtn;
    btnNovo: TJvImgBtn;
    btnEditar: TJvImgBtn;
    btnExcluir: TJvImgBtn;
    GroupBox3: TGroupBox;
    Label1: TLabel;
    DBEdit1: TDBEdit;
    Label2: TLabel;
    DBEdit2: TDBEdit;
    Label4: TLabel;
    DBEdit4: TDBEdit;
    GroupBox4: TGroupBox;
    Label6: TLabel;
    DBEdit6: TDBEdit;
    Label7: TLabel;
    DBEdit7: TDBEdit;
    GroupBox5: TGroupBox;
    Label3: TLabel;
    DBLookupComboBox1: TDBLookupComboBox;
    Label8: TLabel;
    DBEdit8: TDBEdit;
    Label29: TLabel;
    Label28: TLabel;
    Label9: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    DBLookupComboBox2: TDBLookupComboBox;
    Label18: TLabel;
    TimerInicio: TTimer;
    Label19: TLabel;
    DBEdit3: TDBEdit;
    Label20: TLabel;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure btnOkClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure edtProdescrChange(Sender: TObject);
    procedure edtProcodChange(Sender: TObject);
    procedure edtProcodbarraChange(Sender: TObject);
    procedure btnCancelarClick(Sender: TObject);
    procedure TabSheet1Show(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure TabSheet2Show(Sender: TObject);
    procedure btnNovoClick(Sender: TObject);
    procedure btnEditarClick(Sender: TObject);
    procedure btnExcluirClick(Sender: TObject);
    procedure btnFiltrarClick(Sender: TObject);
    procedure TimerInicioTimer(Sender: TObject);
  private
    { Private declarations }
    FAcessoLiberado: Boolean;

    procedure FiltrarProdutos;
    procedure ControlarPageControl(APageIndex: integer);
  public
    { Public declarations }
  end;

var
  frmProdutos: TfrmProdutos;

implementation

{$R *.dfm}

uses uConexao, uDadosProdutos, uPrincipal, uDadosGlobal;

procedure TfrmProdutos.btnCancelarClick(Sender: TObject);
begin
  dmDadosProdutos.CalcelarProduto;

  ControlarPageControl(0);
end;

procedure TfrmProdutos.btnOkClick(Sender: TObject);
begin
  dmDadosProdutos.SalvarProduto;

  ControlarPageControl(0);
end;

procedure TfrmProdutos.ControlarPageControl(APageIndex: integer);
begin
  if APageIndex = 0 then
  begin
    PageControlProdutos.Pages[0].TabVisible := true;  // Tab de consulta de produto
    PageControlProdutos.Pages[1].TabVisible := false; // Tab de manutencao de produto
    PageControlProdutos.ActivePageIndex := 0;
  end
  else
  begin
    PageControlProdutos.Pages[0].TabVisible := false; // Tab de consulta de produto
    PageControlProdutos.Pages[1].TabVisible := true;  // Tab de manutencao de produto
    PageControlProdutos.ActivePageIndex := 1;
  end;
end;

procedure TfrmProdutos.edtProcodbarraChange(Sender: TObject);
begin
  FiltrarProdutos;
end;

procedure TfrmProdutos.edtProcodChange(Sender: TObject);
begin
  FiltrarProdutos;
end;

procedure TfrmProdutos.edtProdescrChange(Sender: TObject);
begin
  FiltrarProdutos;
end;

procedure TfrmProdutos.FiltrarProdutos;
var
  SQL: String;
begin

  if edtProcod.Value <> 0 then
    SQL := ' and procod like "%' + IntToStr(edtProcod.AsInteger) + '%" ';

  if Trim(edtProdescr.Text) <> EmptyStr then
    SQL := SQL + ' and prodescr like "%' + trim(edtProdescr.Text) + '%" ';

  if Trim(edtProcodbarra.Text) <> EmptyStr then
    SQL := SQL + ' and procodbarra like "%' + trim(edtProcodbarra.Text) + '%" ';

  SQL :=
    'select *      ' +
    '  from tblpro ' +
    ' where 1 = 1  ' +
    SQL +
    ' order by prodescr';

  dmDadosProdutos.FiltrarProdutos(SQL);

end;

procedure TfrmProdutos.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
  Release;
  frmProdutos := nil;
end;

procedure TfrmProdutos.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if key = #13 Then
  begin
    key := #0;
    Perform(Wm_NextDlgCtl,0,0);
  end;
end;

procedure TfrmProdutos.FormShow(Sender: TObject);
begin
  FAcessoLiberado := false;
  ControlarPageControl(0);
end;

procedure TfrmProdutos.btnFiltrarClick(Sender: TObject);
begin
  FiltrarProdutos;
end;

procedure TfrmProdutos.btnNovoClick(Sender: TObject);
begin
  if not FAcessoLiberado then
    if dmDadosGlobal.VerificarPermissaoDeAcesso then
      FAcessoLiberado := true
    else
      exit;

  dmDadosProdutos.AdicionarProduto;

  ControlarPageControl(1);
end;

procedure TfrmProdutos.btnEditarClick(Sender: TObject);
begin
  if not FAcessoLiberado then
    if dmDadosGlobal.VerificarPermissaoDeAcesso then
      FAcessoLiberado := true
    else
      exit;

  dmDadosProdutos.EditarProduto;

  ControlarPageControl(1);
end;

procedure TfrmProdutos.btnExcluirClick(Sender: TObject);
begin
  if not FAcessoLiberado then
    if dmDadosGlobal.VerificarPermissaoDeAcesso then
      FAcessoLiberado := true
    else
      exit;

  try
    dmDadosProdutos.ExcluirProduto;
  except
    on E: Exception do
    begin
      MessageDlg(e.Message, mtError,[mbOK],0);
      FiltrarProdutos;
    end;
  end;
end;

procedure TfrmProdutos.TabSheet1Show(Sender: TObject);
begin
  if dmDadosProdutos.cdsTblpro.State = dsEdit then
  begin
    DBEdit1.ReadOnly := true;
    DBEdit1.Color := clBtnFace;

    DBEdit2.SetFocus;
  end
  else if dmDadosProdutos.cdsTblpro.State = dsInsert then
  begin
    DBEdit1.ReadOnly := false;
    DBEdit1.Color := clWindow;

    DBEdit1.SetFocus;
  end;
end;

procedure TfrmProdutos.TabSheet2Show(Sender: TObject);
begin
  edtProcod.SetFocus;
end;

procedure TfrmProdutos.TimerInicioTimer(Sender: TObject);
begin
  TimerInicio.Enabled := false;

  ControlarPageControl(0);

  frmProdutos.WindowState := wsMaximized;
end;

end.
